@echo off
chcp 65001 >nul
REM Laravel Vue Admin 项目安装脚本 (Windows BAT)
REM 自动完成项目初始化，包括数据库迁移和种子数据填充

setlocal enabledelayedexpansion

echo ================================================
echo   Laravel Vue Admin 项目安装脚本
echo ================================================
echo.

REM 检查参数
set FORCE=false
set SKIP_MIGRATIONS=false

:parse_args
if "%~1"=="" goto end_parse
if /i "%~1"=="--force" set FORCE=true
if /i "%~1"=="--skip-migrations" set SKIP_MIGRATIONS=true
shift
goto parse_args
:end_parse

REM 1. 检查 PHP
echo [1/9] 检查 PHP 环境...
php -v >nul 2>&1
if errorlevel 1 (
    echo [错误] PHP 未找到或无法运行
    echo 请确保 PHP ^>= 8.1 已安装并添加到 PATH 环境变量
    pause
    exit /b 1
)
for /f "tokens=*" %%i in ('php -v 2^>^&1 ^| findstr /r "^PHP"') do set PHP_VERSION=%%i
echo [成功] !PHP_VERSION!

REM 2. 检查 Composer
echo [2/9] 检查 Composer...
composer --version >nul 2>&1
if errorlevel 1 (
    echo [错误] Composer 未找到
    echo 请安装 Composer: https://getcomposer.org/
    pause
    exit /b 1
)
for /f "tokens=*" %%i in ('composer --version 2^>^&1') do set COMPOSER_VERSION=%%i
echo [成功] !COMPOSER_VERSION!

REM 3. 检查 Laravel 应用
echo [3/9] 检查 Laravel 应用...
if not exist "artisan" (
    echo [错误] 未找到 artisan 文件
    echo 请确保在 backend 目录下运行此脚本
    pause
    exit /b 1
)
echo [成功] Laravel 应用找到

REM 4. 检查并创建 .env 文件
echo [4/9] 检查环境配置文件...
if not exist ".env" (
    if exist ".env.example" (
        echo [警告] .env 文件不存在，正在从 .env.example 创建...
        copy ".env.example" ".env" >nul
        echo [成功] .env 文件已创建
        echo [警告] 请编辑 .env 文件，配置数据库连接信息！
    ) else (
        echo [错误] .env.example 文件不存在
        pause
        exit /b 1
    )
) else (
    echo [成功] .env 文件存在
)

REM 5. 安装 Composer 依赖
echo [5/9] 安装 Composer 依赖...
composer install --no-interaction --quiet
if errorlevel 1 (
    echo [错误] Composer 依赖安装失败
    pause
    exit /b 1
)
echo [成功] Composer 依赖安装完成

REM 6. 生成 APP_KEY
echo [6/9] 检查并生成 APP_KEY...
findstr /c:"APP_KEY=base64:" .env >nul 2>&1
if errorlevel 1 (
    echo [警告] APP_KEY 未设置，正在生成...
    php artisan key:generate --force >nul 2>&1
    echo [成功] APP_KEY 已生成
) else (
    echo [成功] APP_KEY 已设置
)

REM 7. 生成 JWT 密钥
echo [7/9] 检查并生成 JWT 密钥...
findstr /c:"JWT_SECRET=" .env >nul 2>&1
if errorlevel 1 (
    echo [警告] JWT_SECRET 未设置，正在生成...
    php artisan jwt:secret --force >nul 2>&1
    echo [成功] JWT_SECRET 已生成
) else (
    echo [成功] JWT_SECRET 已设置
)

REM 8. 清理缓存
echo [8/9] 清理缓存...
php artisan config:clear >nul 2>&1
php artisan cache:clear >nul 2>&1
php artisan route:clear >nul 2>&1
php artisan view:clear >nul 2>&1
echo [成功] 缓存已清理

REM 9. 数据库迁移和种子
echo [9/9] 数据库迁移和种子数据...

if "%SKIP_MIGRATIONS%"=="true" (
    echo [警告] 跳过数据库迁移
) else (
    REM 检查数据库配置
    findstr /c:"DB_DATABASE=" .env >nul 2>&1
    if errorlevel 1 (
        echo [错误] 数据库配置不完整
        echo 请编辑 .env 文件，配置数据库连接信息
        pause
        exit /b 1
    )

    REM 测试数据库连接
    echo   测试数据库连接...
    php artisan db:show >nul 2>&1
    if errorlevel 1 (
        echo [错误] 数据库连接失败
        echo 请检查 .env 文件中的数据库配置
        echo 数据库配置示例：
        echo   DB_CONNECTION=mysql
        echo   DB_HOST=127.0.0.1
        echo   DB_PORT=3306
        echo   DB_DATABASE=laravel_vue_admin
        echo   DB_USERNAME=root
        echo   DB_PASSWORD=your_password
        pause
        exit /b 1
    )
    echo   [成功] 数据库连接成功

    REM 运行数据库迁移
    if "%FORCE%"=="true" (
        echo   [警告] 强制重置数据库（将删除所有数据）...
        set /p CONFIRM="   确定要继续吗？(yes/no): "
        if /i not "!CONFIRM!"=="yes" (
            echo   已取消
            pause
            exit /b 0
        )
        echo   正在重置数据库...
        php artisan migrate:fresh --force >nul 2>&1
        if errorlevel 1 (
            echo [错误] 数据库迁移失败
            pause
            exit /b 1
        )
        echo   [成功] 数据库已重置
    ) else (
        echo   正在运行数据库迁移...
        php artisan migrate --force >nul 2>&1
        if errorlevel 1 (
            echo [错误] 数据库迁移失败
            echo 提示: 如果表已存在，可以使用 --force 参数重置数据库
            pause
            exit /b 1
        )
        echo   [成功] 数据库迁移完成
    )

    REM 运行数据库种子
    echo   正在填充初始数据（管理员账号、角色、权限、菜单）...
    php artisan db:seed --force --class=DatabaseSeeder >nul 2>&1
    if errorlevel 1 (
        echo [错误] 数据库种子失败
        pause
        exit /b 1
    )
    echo   [成功] 初始数据填充完成
)

echo.
echo ================================================
echo   安装完成！
echo ================================================
echo.
echo 默认管理员账号：
echo   用户名: admin
echo   密码: admin123
echo.
echo 下一步：
echo   1. 启动后端服务器: php artisan serve
echo   2. 启动前端服务器: cd ..\frontend ^&^& npm install ^&^& npm run dev
echo   3. 访问前端地址: http://localhost:5173
echo.
echo [警告] 首次登录后请立即修改管理员密码！
echo.
pause

